10243. Книга 1
Реализуйте структуру Book.
struct Book
{
int
book_id;
char title[50];
char author[50];
char subject[50];
};
Вход.
Первая строка содержит количество записей n (n ≤ 100). Далее следуют n записей, каждое поле задано
в отдельной строке. Дальше следует количество запросов q (q ≤ 100). Каждый запрос
содержит book_id книги.
Выход.
Для каждого запроса вывести название и автора книги как показано в примере. Если такой книги не
существует, вывести “Book not found”.
Пример входа |
Пример выхода |
|
4 234 C_Programming Nuha Ali C Programming Tutorial 12 Telecom Billing Zara Ali Telecom Billing Tutorial 7865 Effective Java Joshua Bloch Java Programming 4321 Design Patterns Elisabeth Freeman Java Programming 3 12 13 4321 |
Telecom Billing by Zara Ali Book not found Design Patterns by Elisabeth Freeman |
структуры
Рассмотрим несколько
вариантов реализации этой задачи:
·
при помощи статического массива;
·
при помощи динамического выделения памяти;
·
при помощи списка;
Реализация алгоритма
Объявим струтуру Book.
struct Book
{
int book_id;
char title[50];
char author[50];
char subject[50];
};
Объявим массив книг.
Book book[100];
Читаем входные даные. Заносим информацию о книгах в
массив структур book.
scanf("%d", &n);
for (i = 0;
i < n; i++)
{
scanf("%d\n", &book[i].book_id);
gets(book[i].title);
gets(book[i].author);
gets(book[i].subject);
}
Читаем количество запросов q.
scanf("%d", &q);
for (i = 0;
i < q; i++)
{
Читаем book_id книги, информацию о которой следует вывести.
scanf("%d", &book_id);
Установим flag = 0 если требуемая книга не найдена и flag = 1 иначе.
int flag = 0;
Перебираем имеющиеся книги. Ищем среди них книгу с идентификационным
номером book_id.
for (j = 0; j < n; j++)
{
Если требуемая книга найдена, то выводим ее название и
автора.
if (book_id == book[j].book_id)
{
printf("%s by %s\n",
book[j].title, book[j].author);
flag = 1;
break;
}
}
Если книги в массиве структур нет, то выводим информацию
об этом.
if (flag == 0) printf("Book
not found\n");
}
Реализация алгоритма – динамическое выделение
памяти
#include <stdio.h>
struct Book
{
int book_id;
char title[50];
char author[50];
char subject[50];
};
int q, i,
j, n, book_id;
Book *book;
int main()
{
scanf("%d", &n);
book = new Book[n];
for (i = 0; i < n; i++)
{
scanf("%d\n", &book[i].book_id);
gets(book[i].title);
gets(book[i].author);
gets(book[i].subject);
}
scanf("%d", &q);
for (i = 0; i < q; i++)
{
scanf("%d", &book_id);
int flag = 0;
for (j = 0; j < n; j++)
{
if (book_id == book[j].book_id)
{
printf("%s by %s\n",
book[j].title, book[j].author);
flag = 1;
break;
}
}
if (flag == 0) printf("Book not found\n");
}
delete[] book;
return 0;
}
Реализация алгоритма – linked list
#include <stdio.h>
#include <malloc.h>
#include <string.h>
struct Book
{
int book_id;
char title[50];
char author[50];
char subject[50];
struct Book *next;
};
struct List
{
public:
Book *head, *tail;
};
int q, i, j, n, book_id;
List *book;
void AddToTail(List *book, Book *temp)
{
if (book->tail != NULL)
{
book->tail->next
= (struct Book *)malloc(sizeof(Book));
memcpy(book->tail->next,
temp, sizeof(Book));
book->tail = book->tail->next;
}
else
{
book->head = book->tail = (struct Book *)malloc(sizeof(Book));
memcpy(book->head, temp, sizeof(Book));
}
}
int main()
{
scanf("%d", &n);
book = (struct List *)malloc(sizeof(List));
book->head =
book->tail = NULL;
for (i = 0; i <
n; i++)
{
Book temp;
scanf("%d\n",
&temp.book_id);
gets(temp.title);
gets(temp.author);
gets(temp.subject);
AddToTail(book, &temp);
}
scanf("%d", &q);
for (i = 0; i <
q; i++)
{
scanf("%d", &book_id);
int flag = 0;
Book *temp =
book->head;
for (j = 0; j <
n; j++)
{
if (book_id ==
temp->book_id)
{
printf("%s by
%s\n", temp->title, temp->author);
flag = 1;
break;
}
temp = temp->next;
}
if (flag == 0)
printf("Book not found\n");
}
return 0;
}